package com.xu.cloud.common.enums;

import java.util.Arrays;
import java.util.Optional;

/**
 * 枚举类基础接口
 *
 * @author xuguan
 * @since 2023/9/9
 */
public interface IEnum<T extends Enum<T> & IEnum<T>> {
    /**
     * code
     */
    String getCode();

    /**
     * message
     */
    String getMessage();

    /**
     * 通过code获取枚举类实例
     *
     * @param cls  枚举类
     * @param code code
     * @param <T>  枚举类实例
     * @return 枚举类实例
     */
    static <T extends Enum<T> & IEnum<T>> Optional<T> getByCode(Class<T> cls, String code) {
        return Arrays.stream(cls.getEnumConstants())
                .filter(element -> code.equals(element.getCode()))
                .findFirst();
    }
}
